Showing posts with label Tin Công Nghệ. Show all posts
Showing posts with label Tin Công Nghệ. Show all posts

5 điều cần biết về mạng riêng ảo VPN

VPN tạo một đường kết nối an toàn giữa máy tính của bạn và mạng Internet công cộng.
Huy Thắng

(PCWorldVN) VPN không chỉ được sử dụng bởi doanh nghiệp mà cũng đang là lựa chọn của hầu hết người dùng cá nhân nhằm tăng tính bảo mật khi kết nối với mạng công cộng.

Internet là một môi trường công cộng, do đó việc chia sẻ dữ liệu có tính riêng tư thông qua hệ thống mạng Internet là cực kỳ nguy hiểm vì thông tin có thể bị rò rỉ, mất cắp... Chính vì vậy, mạng riêng ảo VPN (Virtual Private Network) ra đời dựa trên cơ sở hạ tầng của hệ thống mạng Internet nhằm tạo ra một kết nối mạng hoàn toàn riêng tư và bảo mật.

VPN được ví như một “đường ống” an toàn giữa hai hoặc nhiều máy tính trên mạng Internet, cho phép chúng truy cập với nhau như thể đang ở trong một mạng LAN nội bộ riêng biệt. Trước đây, VPN được sử dụng chủ yếu bởi các doanh nghiệp muốn kết nối an toàn nhiều chi nhánh cách xa nhau về mặt địa lý, hoặc cho phép nhân viên của họ kết nối vào mạng văn phòng để làm việc từ xa mà vẫn đảm bảo tính bảo mật. Tuy nhiên, ngày nay VPN cũng đang trở thành một dịch vụ quan trọng đối với hầu hết người dùng cá nhân nhằm bảo vệ họ khỏi sự tấn công khi kết nối với các mạng công cộng.

Giải pháp hiệu quả để bảo vệ sự riêng tư

Mạng không dây mở thường phải đối mặt với nhiều nguy cơ rò rỉ thông tin của người sử dụng, bởi vì kẻ xấu có thể kết nối vào đó một cách dễ dàng và sử dụng các kỹ thuật khác nhau để theo dõi lưu lượng web hay thậm chí chiếm quyền điều khiển tài khoản các trang web không sử dụng giao thức bảo mật HTTPS. Ngoài ra, một số người dùng mạng Wi-Fi có thể cố tình đưa quảng cáo vào các trang web và dẫn đến những thao tác theo dõi không mong muốn.

Bằng cách sử dụng kết nối VPN, tất cả lưu lượng trong hệ thống mạng của bạn có thể được truyền đi một cách an toàn thông qua một máy chủ đặt ở nơi khác trên thế giới. Giải pháp VPN sẽ bảo vệ máy tính của bạn tránh khỏi mọi nỗ lực theo dõi và xâm nhập. VPN thậm chí có thể giấu địa chỉ IP máy tính thật của bạn khi truy cập một số trang web hay dịch vụ.

VPN có thể vượt tường lửa và không bị chặn về mặt địa lý

Người dùng cá nhân thường sử dụng VPN để mở các nội dung trực tuyến vốn không được phép truy cập trong khu vực của họ. Điều này hầu như phụ thuộc vào những quy định do nhà cung cấp dịch vụ mạng ISP đưa ra. Tuy nhiên, các nhà cung cấp dịch vụ VPN thường đặt máy chủ tại nhiều nước trên thế giới và cho phép người dùng dễ dàng chuyển đổi giữa những máy chủ này với nhau. Ví dụ, người dùng một số nước châu Á có thể kết nối thông qua một máy chủ ở Mỹ để truy cập nội dung Netflix, vốn là dịch vụ hiện không được cung cấp rộng rãi tại khu vực này.

Ở một số quốc gia trên thế giới, chính phủ không cho phép người dùng truy cập một số trang web nhất định vì lý do kinh tế, chính trị, văn hóa,… Ngoài ra, một số trang web hay dịch vụ bán hàng trực tuyến thường ngăn chặn truy cập từ một số nước vì lý do an toàn. Tuy nhiên, vài người dùng vẫn có thể sử dụng VPN để truy cập và “qua mặt” những quy định này.

Miễn phí hay có phí

Hiện nay, người dùng cá nhân có nhiều lựa chọn dịch vụ VPN miễn phí hoặc trả phí. Các ứng dụng VPN miễn phí thường hiển thị quảng cáo, số lượng máy chủ hạn chế và tốc độ kết nối cũng chậm hơn. Tuy nhiên, nếu nhu cầu chỉ là thường xuyên lướt web hay truy cập một vài dịch vụ nhất định thì như vậy có lẽ là quá đủ đối với hầu hết người dùng thông thường.

Các dịch vụ VPN miễn phí thường đi kèm quảng cáo.
Ngoài ra, một nhược điểm khác của máy chủ VPN miễn phí là có nhiều khả năng các địa chỉ IP mà người dùng sử dụng sau đó sẽ bị chặn hay lọc trên các trang web khác nhau. Bên cạnh đó, các dịch vụ VPN miễn phí thường bị lạm dụng bởi tin tặc, các trang web chuyên gửi thư rác và những người dùng có ý đồ xấu.

Trong khi đó, các dịch vụ VPN thương mại có trả phí thường hoạt động dựa trên mô hình đăng ký và có nhiều gói tốc độ tải về hoặc giới hạn dữ liệu. Một vài nhà cung cấp phần mềm chống virus còn tích hợp dịch vụ VPN vào sản phẩm của họ, có cả phiên bản miễn phí lẫn các giải pháp thương mại đắt tiền hơn. Nhìn chung, các giải pháp VPN này cung cấp các thiết lập bảo mật hợp lý hơn, vì vậy người dùng không phải lo lắng quá nhiều về việc cấu hình.

Không phải mọi VPN đều như nhau

Hiện nay, có nhiều công nghệ VPN khác nhau với thế mạnh mã hóa đa dạng. Chẳng hạn, công nghệ VPN PPTP (Point-to-Point Tunneling Protocol) là nhanh nhất nhưng ít an toàn hơn so với IPSec hoặc OpenVPN, vốn là những công nghệ sử dụng giao thức SSL/TLS (Secure Sockets Layer/Transport Layer Security). Người dùng nên lựa chọn công nghệ VPN trên cơ sở từng trường hợp cụ thể, tùy thuộc vào loại dữ liệu sẽ được chuyển qua đó.

Về cơ bản, OpenVPN hỗ trợ nhiều thuật toán mã hóa kết hợp với nhau, các giao thức trao đổi khóa và thuật toán băm. Cách thực hiện phổ biến nhất được cung cấp bởi các nhà cung cấp dịch vụ VPN cho các kết nối OpenVPN là mã hóa AES với trao đổi khóa RSA và chữ ký SHA. Các thiết lập được đề nghị là mã hóa AES-256 với một khóa RSA có độ dài ít nhất 2.048 bit và SHA-2 (SHA-256), thay vì SHA-1. Ngoài ra, cũng nên lưu ý là trong các mạng VPN dựa trên giao thức TLS thì loại thuật toán mã hóa và độ dài khóa được sử dụng cũng rất quan trọng.

Tự tạo VPN

Nếu là người yêu thích công nghệ, hẳn có lúc bạn sẽ cần kết nối để truy cập các thiết bị trong mạng gia đình từ bất cứ nơi nào. Sẽ là lựa chọn tốt hơn nếu bạn tự tạo một dịch vụ VPN riêng nhằm tránh bị rò rỉ thông tin cá nhân và cũng để đảm bảo tính bảo mật cho hệ thống mạng của mình.

Hầu hết router đời mới đều tích hợp tính năng VPN.
Một số model router đời mới ngày nay thường được tích hợp tính năng VPN, vì vậy bạn thậm chí không cần phải xây dựng và thiết lập một máy chủ VPN riêng biệt chuyên dụng. Tuy nhiên, khi sử dụng giải pháp VPN trên router thì nguyên tắc chung là càng mở ít cổng trong router càng tốt. Đồng thời, bạn nên tắt tính năng UPnP (Universal Plug and Play) để những chiếc camera IP kém bảo mật không bị rò rỉ hình ảnh riêng tư cho cả thế giới cùng xem.

Tự tạo bộ phân tích cú pháp bằng JavaCC


Nguyễn Văn Sơn - Global CyberSoft VN

(PCWorldVN) JavaCC là một bộ thư viện mã nguồn mở chạy trên nền Java VM được Sun Microsystems tạo ra nhằm hỗ trợ cho các lập trình viên trong quá trình phát triển phần mềm.

Trong suốt sự nghiệp, hẳn các lập trình viên (LTV) không ít lần phải đối diện với các vấn đề xử lý chuỗi kí tự có cấu trúc phức tạp, hoặc với các bài toán hóc búa như viết một trình thông dịch, trong đó cần xử lý số lượng lớn các lệnh cấp cao do người dùng nhập vào, hoặc thậm chí tự sáng tạo cho riêng mình một ngôn ngữ lập trình mới với một tập hợp những câu lệnh có cú pháp được định trước. Để phục vụ mục đích đó, giải pháp thường được các LTV nghĩ đến đầu tiên là tự viết cho mình một thư viện xử lý chuỗi, kèm theo những thuật toán cắt nối phức tạp và các vấn đề đau đầu như việc tối ưu việc sử dụng bộ nhớ, tăng tốc độ xử lý.

JavaCC là một bộ thư viện mã nguồn mở chạy trên nền Java VM (từ 1.2 về sau), được Sun Microsystems tạo ra đã giảm một gánh nặng cho các LTV khi tự động hóa hầu hết các công đoạn xử lý và tính toán trên. Một cách đơn giản, LTV chỉ cần định ra một tập hợp các mẫu cú pháp (grammar) theo cấu trúc xác định, và JavaCC sẽ giúp sinh mã nguồn trọn vẹn của một bộ phân tích và bóc tách cú pháp cho bạn (thường được gọi là analyzer và parser), ở dạng ngôn ngữ Java hoặc C/C++.

Trong bài này, tôi sẽ mô tả cách thức sử dụng JavaCC để xử lý các chuỗi lệnh có cú pháp đơn giản, với hy vọng sẽ giúp các bạn có cái nhìn tổng quát về bộ thư viện tuyệt vời này và áp dụng hiệu quả cho nhu cầu thực tế của mình. Để thuận tiện, tôi sẽ áp dụng Java trong ví dụ kèm theo, trên hệ điều hành Windows.

Thư viện JavaCC không cần thao tác cài đặt phức tạp, tất cả những gì bạn cần là tải bản JavaCC mới nhất được biên dịch sẵn tại javacc.java.net và giải nén tại một thư mục bạn làm việc. Tôi sẽ tạm đặt nó tại C:\JavaCC-6.0\. Để tiện việc chạy lệnh phân tích và sinh mã nguồn, tôi tạo một batch file có tên "javacc.bat" và bổ sung vào đường dẫn hệ thống (system path) cho nó. Batch file có nội dung như sau:

java -cp c:\javacc-6.0\bin\lib\javacc.jar javacc %1

Để kiểm tra xem thao tác cài đặt JavaCC vào hệ thống của bạn đúng hay không, bạn mở cửa sổ lệnh (command prompt) của Windows tại một thư mục bất kì, và nhập vào "javacc". Nếu nội dung hướng dẫn câu lệnh của JavaCC xuất hiện, tức là bạn đã cài đặt đúng. Ngược lại, bạn cần xem lại quá trình cài đặt.

Giả định phần mềm chúng ta đang phát triển cho phép người dùng soạn các mã lệnh (tạm gọi là script) để điều khiển tự động một tác vụ nào đó. Cụ thể hơn, người dùng cần một tập các tác vụ sau được lặp lại nhiều lần:

- Chọn một ô nhập (text field) trên màn hình
- Gõ vào chuỗi "ABC"
- Nhấn nút "Submit"

Hãy hình dung trên cửa sổ soạn thảo của phần mềm, người dùng sẽ nhập các dòng script sau:

[Screen01].[TextBoxA].Select
[Screen01].[TextBoxA].EnterString("ABC 123")
[Screen01].[ButtonSubmit].Click

Yêu cầu là trình soạn thảo phải kiểm tra xem các lệnh trên có đúng cú pháp không và nếu đúng thì cần tách các thông tin để xử lý cho từng lệnh cụ thể. Đến lúc này, ta sẽ cần đến sức mạnh của JavaCC.

Một trong những điểm có thể gọi là trái tim trong bộ parser của JavaCC là khả năng phân tích các chuỗi kí tự dựa trên các câu ngữ pháp (grammar) bạn cần tổ chức bằng các mẫu Regular expression (tạm gọi là Regex) mà JavaCC gọi là các Regex Production. Tức là, với các mẫu câu lệnh script trên, bạn cần hình dung và định ra một cấu trúc chung, tương tự như việc phân tích một câu văn có chủ ngữ, vị ngữ, động từ... Bộ parser tương lai của bạn hoạt động chính xác và nhanh hay không, hoàn toàn phụ thuộc vào sự hợp lý và tinh tế trong việc sử dụng regex cho các production này. Có hai dạng production trong JavaCC, một là Regex Production, được tổ chức trực tiếp bằng các từ khóa "TOKEN" mà bạn sẽ thấy bên dưới. Thứ hai là dạng BNF Production (Backus–Naur Form Production), cho phép bạn tổ chức các câu ngữ pháp regex trong các hàm Java.

Để bắt đầu, ta soạn một tập tin văn bản có tên "Keywords.jj" (còn gọi là tập tin grammar) và mô tả các cú pháp lệnh dưới các dạng production ta muốn theo cấu trúc mà JavaCC quy định. JavaCC khuyến khích bạn đặt tên tệp tin grammar này có đuôi .jj, tuy nhiên thực tế bạn có thể đặt với đuôi bất kỳ và lưu tại thư mục bạn làm việc. Hãy xem đoạn ví dụ bên dưới:

<Mã nguồn toàn bộ file grammar của ví dụ>
options
{
IGNORE_CASE = true;
//OUTPUT_LANGUAGE="c++";
}

PARSER_BEGIN(KeywordParser)

public class KeywordParser
{
public static void main(String[] args) throws ParseException, TokenMgrError
{
KeywordParser parser = new KeywordParser( System.in ) ;
parser.parseScript();
}
}
PARSER_END(KeywordParser)

SKIP: { "\n" | "\r" | "\r\n" | "\t" }

TOKEN:
{
<KW_SELECT: "Select" >
|<KW_ENTER_STRING: "EnterString">
|<KW_CLICK: "Click">
|<KW_PREFIX: <OBRACKET><IDENTIFIER><CBRACKET>( (<DOT>) <OBRACKET><IDENTIFIER><CBRACKET>)*>
}

TOKEN:
{
<#DIGIT: (["0"-"9"])+>
| <#ALPHABET: (["a"-"z", "A"-"Z"])+>
| <IDENTIFIER: <ALPHABET>(<ALPHABET>|<DIGIT>|<SPACE>)*>
| <DOT: ".">
| <OBRACKET: "[">
| <CBRACKET: "]">
| <OQUOT: "(">
| <CQUOT: ")">
| <DQUOT: "\"">
| <SPACE: " ">
}

/* main BNF production routine */
void parseScript() : {}
{
( statement() )*
<EOF>
}

/* detail BNF productions routines */
void statement() : {}
{
{ System.out.println("\n=== Start a command ==="); }
(
<KW_PREFIX> { System.out.println("\tPrefix: " + token.image); }
<DOT>
)
(
<KW_SELECT> { System.out.println("\tKeyword: " + token.image); }
| <KW_CLICK> { System.out.println("\tKeyword: " + token.image); }
|
(
<KW_ENTER_STRING> { System.out.println("\tKeyword: " + token.image); }
<OQUOT><DQUOT>
(
<IDENTIFIER> { System.out.println("\tString: " + token.image); }
)
<DQUOT><CQUOT>
)
)
}


Một số thành phần của tập tin grammar trên có ý nghĩa sau:

- options: nơi thiết lập cấu hình chung cho bộ sinh mã nguồn JavaCC. Ví dụ, khi chỉ định "IGNORE_CASE = true", JavaCC sẽ cho phép phân tích các chuỗi kí tự không phân biệt chữ hoa hay thường. Có một số tùy chọn quan trọng bạn sẽ cần tham khảo, chẳng hạn OUTPUT_LANGUAGE chỉ thị sinh mã Java hay C++, hay UNICODE_INPUT cho phép hỗ trợ phân tích các chuỗi định dạng UNICODE, khi bạn cần hỗ trợ tiếng Việt hay Nhật.

- PARSER_BEGIN và PARSER_END: JavaCC cần bạn định nghĩa một lớp Java (Java class) chính cho bộ parser, trong đó bạn có thể bổ sung mã Java cho các mục đích riêng, chẳng hạn như tổ chức và lưu trữ dữ liệu có được từ quá trình phân tích và bóc tách các chuỗi. JavaCC sẽ dùng tên class trên để đặt cho các tập tin chứa mã nguồn bộ parser sắp sinh ra.

PARSER_BEGIN(parser_name)
. . .
class parser_name . . . {
. . .
}
. . .
PARSER_END(parser_name)

- TOKEN: Nơi định nghĩa các thành phần trong một câu ngữ pháp, các kí tự đặc biệt, chuỗi cố định và các regex production phức tạp hơn. Bạn có thể tập hợp nhiều định nghĩa vào chung một nhóm token, cách nhau bởi dấu "|" (OR trong Java). Vài ví dụ:

<DOT: ".">: định nghĩa kí tự đặc biệt dấu "."

<#DIGIT: (["0"-"9"])+>: định nghĩa một chuỗi chỉ chứa các kí tự số từ 0-9, có ít nhất một số. Dấu thăng "#" chỉ định token này chỉ được dùng nội bộ trong các token khác, không dùng trong các hàm Java NBF production (trong đoạn mã nguồn trên, hàm parseScript là một BNF production).

- SKIP: Nơi định nghĩa các token mà bạn muốn parser bỏ qua trong quá trình phân tích. Ví dụ các kí tự đặc biệt không cần thiết giữa các lệnh, các kí tự xuống dòng...

- BNF Production: Là một hàm Java định nghĩa một câu có ngữ pháp phức tạp, đồng thời cho phép ta chèn mã nguồn Java giữa các thành phần để thực hiện các thao tác kiểm tra, lưu trữ dữ liệu hoặc thông báo lỗi. Ví dụ hàm “parseScript” như sau:

void parseScript() : 
{
/* bạn có thể khai báo, khởi tạo các biến tùy ý nơi này */
}
{
( statement() )*
<EOF>
}

Hàm “parseScript” sử dụng regex để mô tả nội dung tập tin script chứa các mã lệnh, trong đó đoạn (....)* chỉ định có thể không có lệnh nào, hoặc nhiều lệnh. Kí hiệu <EOF> được JavaCC định nghĩa sẵn, chỉ định việc kết thúc tập tin script.

Tiếp tục, để hỗ trợ ba lệnh "Select", "EnterString" và "Click", bạn cần một hàm BNF khác được đặt tên "statement" trong mã ví dụ trên. Hàm "statement" này đại diện cho một cấu trúc lệnh tổng quát bao gồm 2 thành phần chính:

- Prefix: tức là đoạn "[Screen01].[TextBoxA]". Được định nghĩa bằng token <KW_PREFIX> ở trên.

- Keyword chính: tức là đoạn có chuỗi chính xác là "Select", "EnterString" và "Click", được định nghĩa bằng 3 token <KW_SELECT>, <KW_CLICK>, <KW_ENTER_STRING>. Giữa prefix và keyword chính được phân cách bởi dấu chấm, tức token <DOT>.

Khi đã hoàn tất tập tin grammar, chúng ta sẽ tiến hành chạy bộ sinh mã của JavaCC bằng lệnh sau:

javacc Keywords.jj

Nếu thành công, bạn sẽ thấy kết quả như hình 1. Nếu gặp lỗi sai cấu trúc tập tin grammar, hoặc các production bạn không đúng, JavaCC sẽ thông báo cho bạn.

Hình 1
JavaCC sẽ sinh toàn bộ mã nguồn bộ parser cho bạn, trong các tập tin Java như trong hình 2. Với các mã này, bạn có thể nhúng vào phần mềm Java bạn đang phát triển để sử dụng chức năng parser mong muốn.

Hình 2
Trong ví dụ này, chúng ta sẽ kiểm tra khả năng bộ parser mình vừa sinh bằng các script được lưu tạm trong tập tin script.txt với nội dung:

[Screen01].[TextBoxA].Select
[Screen01].[TextBoxA].EnterString("ABC 123")
[Screen01].[ButtonSubmit].Click

Trước tiên, ta dùng Java để biên dịch các tập tin Java vừa sinh ở trên:

javac *.java

Nếu trong tập tin grammar trên có các lỗi liên quan đến mã Java mà bạn nhúng kèm, bước này sẽ thông báo cụ thể cho bạn.

Cuối cùng, bạn chạy thử bộ parser mới để kiểm tra các lệnh trong script.txt:

java KeywordParser < script.txt

Kết quả phân tích được thể hiện trong hình bên dưới:

Hình 3
Như vậy, bằng các lệnh đơn giản được kèm trong tập tin grammar, bạn thấy được kết quả phân tích trong hình 3, các lệnh và tham số được tách đầy đủ rất nhanh và dễ dàng.

Trên đây là ví dụ đơn giản thể hiện khả năng của JavaCC. Trên thực tế, bạn sẽ cần tìm hiểu rõ hơn về các thông số chỉ thị và các cách thức xử lý khi gặp các câu ngữ pháp phức tạp, ví dụ như câu lệnh IF...THEN...ELSE trong ngôn ngữ lập trình. Tất cả các thông tin đó đều được mô tả khá chi tiết cùng nhiều ví dụ cụ thể tại trang chủ của JavaCC.

Hy vọng qua bài viết này, bạn có một cái nhìn tổng quát về cấu trúc một tập tin ngữ pháp của JavaCC cũng như cách thức chạy lệnh để sinh mã nguồn bộ parser riêng cho mình mà không cần bận tâm các vấn đề xử lý chuỗi phức tạp. Một lập trình viên thành thạo các ngôn ngữ lập trình và các kỹ thuật là điều cần có, nhưng khả năng vận dụng nhuần nhuyễn các thư viện hỗ trợ như JavaCC không chỉ giúp tạo nên những sản phẩm có giá trị thực tế, mà còn giúp tiết kiệm được rất nhiều thời gian và công sức trong quá trình phát triển phần mềm.

Đôi điều về Regex

Để làm chủ được bộ ngữ pháp của JavaCC, bạn cần thành thạo Java và regular expression. Dưới đây là vài chú ý về regular expression được dùng trong ví dụ trên:

(...)+ : Một hoặc nhiều
(...)* : Không hoặc nhiều
(...)? hoặc […]: Tùy chọn và không bắt buộc
(["0"-"9"])+ : Chuỗi chỉ chứa các kí tự dạng số, có ít nhất một kí tự.

Về việc vận dụng JavaCC tại Global CyberSoft VN (GCS)

Tại Global CyberSoft VN, chúng tôi đã phát triển thành công phần mềm eMonKey giúp tự động hóa việc kiểm thử phần mềm (software testing) trên nhiều platform khác nhau, bao gồm desktop, web và mobile. eMonKey áp dụng kỹ thuật keyword-driven, cho phép thu giữ (record) lại các tác vụ của người dùng trên phần mềm chỉ định được dạng các keyword, đồng thời cho phép người dùng soạn thảo và hiệu chỉnh các lệnh keyword đó, cuối cùng sẽ cho phép chạy lại (playback) các tác vụ đó trên phần mềm cần kiểm thử. Chức năng soạn thảo của eMonKey sử dụng JavaCC làm bộ phân tích cú pháp và bóc tách dữ liệu.

Tham khảo: https://javacc.java.net/doc/javaccgrm.html

Top 10 ngôn ngữ lập trình 2016


Thanh Phong

(PCWorldVN) C vẫn là số 1, nhưng dữ liệu lớn mới là người thắng cuộc

Năm thứ ba IEEE Spectrum xếp hạng các ngôn ngữ lập trình phổ biến nhất. Spectrum đánh giá ngôn ngữ qua 12 chỉ số, mỗi chỉ số xem xét mức độ phổ biến theo một hướng khác nhau. Kết hợp các chỉ số cho ra thứ hạng của ngôn ngữ.

Vì mỗi người có thể xem trọng những khía cạnh khác nhau, công cụ tương tác Top Programming Languages của Spectrum của phép bạn điều chỉnh trọng lượng của từng chỉ số góp phần vào việc xếp hạng. Ngoài ra còn có bộ lọc tùy chọn: ví dụ, chỉ xem xét các ngôn ngữ được sử dụng trong các hệ thống nhúng hoặc ứng dụng di động. Bạn có thể tùy chỉnh trọng lượng từng chỉ số hoặc sử dụng những thiết lập có sẵn.

Thiết lập mặc định phản ánh mối quan tâm chung của các thành viên IEEE. Vậy theo Spectrum Top 10 ngôn ngữ lập trình năm 2016 là những ngôn ngữ nào?

Sau hai năm ở vị trí thứ hai, C cuối cùng đã lật đổ Java để leo lên vị trí số 1. Trong Top 5, Python đã hoán đổi vị trí với C++ để chiếm vị trí số 3, C# bị R hất ra khỏi Top 5. R được đà từ những năm trước, nằm trong xu hướng chung đang lên của các ngôn ngữ dữ liệu lớn hiện đại được phân tích chi tiết trong bài “Xu hướng ngôn ngữ lập trình: Sự trỗi dậy của dữ liệu lớn”.

Google và Apple cũng khiến người ta phải chú ý, Go của Google đã đánh bại Swift của Apple để vào Top 10. Tuy nhiên Swift cũng tăng ấn tượng khi nhảy 5 bậc lên vị trí thứ 11 so với năm rồi (năm đầu tiên Swift góp mặt trong bảng xếp hạng). Không như năm rồi xuất hiện nhiều gương mặt mới, năm nay trong bảng xếp hạng chỉ có những cái tên cũ.

Những thay đổi đáng chú ý khác như Ladder Logic tăng 5 bậc leo lên vị trí thứ 34. Ladder Logic được sử dụng trong các bộ điều khiển logic lập trình, đặc biệt là những bộ điều khiển được dùng trong các nhà máy. Mặc dù sản xuất có vẻ như là một ngách hẹp của ngôn ngữ, nhưng mức độ khá phổ biến của nó cho thấy thị trường ngách đó thực sự lớn. HTML tiếp tục phổ biến, tăng lên vị trí thứ 16. (Spectrum xác định một ngôn ngữ lập trình phải có cú pháp riêng biệt được dùng để tạo ra các chỉ thị máy tính, ngay cả khi đó chỉ là những chỉ thị về cách cấu trúc dữ liệu).

Trong những cái tên rớt hạng, có lẽ đáng ngạc nhiên nhất là sự sụt giảm của ngôn ngữ lập trình Shell (dùng để tạo kịch bản) được các nhà quản trị hệ thống ưa thích, rớt 7 bậc xuống vị trí thứ 19. Điều này có thể phản ánh sự phát triển của các hệ thống tinh vi hơn để quản lý các trung tâm dữ liệu dựa trên đám mây, nhưng chúng ta sẽ phải chờ xem xu hướng này có tiếp tục trong năm tới hay không hay đây chỉ là một sự tình cờ thống kê.

Nguồn: IEEE Spectrum

Trào lưu ngôn ngữ lập trình: Sự trỗi dậy của dữ liệu lớn

Các ngôn ngữ được cho là có khả năng xử lý dữ liệu lớn, chẳng hạn như Julia, Python, R và Scala
Thanh Phong

(PCWorldVN) Các ngôn ngữ như Go, Julia, R, Scala và cả Python đều đang xử lý hàng đống con số

Năm nay là năm thứ ba tạp chí IEEE Spectrum thực hiện việc xếp hạng hàng năm các ngôn ngữ lập trình, và chúng ta bắt đầu thấy được một số trào lưu. Những ngôn ngữ nào lên hạng? Những ngôn ngữ đang đuối sức? Và những chỉ số đánh giá xếp hạng nào góp phần nhiều nhất cho những thay đổi này?

Bài viết này tập trung vào các ngôn ngữ được cho là có khả năng xử lý dữ liệu lớn, chẳng hạn như Julia, Python, R và Scala. Hầu hết các ngôn ngữ này được xây dựng nhằm xử lý lượng lớn con số, có các “gói” (hay mô-đun) có thể dùng để xây dựng nhanh chóng chức năng phân tích dữ liệu lớn. Những ngôn ngữ này đang ngày càng trở nên quan trọng vì chúng cho phép khai thác các tập dữ liệu lớn hiện có ở hầu hết các lĩnh vực từ khoa học đến thương mại.

Ngôn ngữ phát triển mạnh nhất trong thể loại này là Go, ngôn ngữ nguồn mở được Google tạo ra để giải quyết các vấn đề của công ty trong việc mở rộng hệ thống và lập trình song song hồi năm 2007. Theo xếp hạng của Spectrum, Go tăng 10 bậc so với năm 2014 để leo lên vị trí thứ 10 năm nay. Các ngôn ngữ dữ liệu lớn khác cũng thăng hạng so với năm 2014 là R và Scala, R tăng 4 bậc còn Scala tăng 2 bậc (mặc dù giảm 2 bậc so với năm 2015). Julia được đưa vào danh sách các ngôn ngữ đánh giá trong năm 2015, trong năm qua thứ hạng của nó lên xuống trong khoảng 40-33, vẫn còn là một “cầu thủ dự bị” nhưng rõ ràng rất có tiềm năng.

Sự thăng hạng nhanh chóng của Go chính là nhờ sự gia tăng mạnh mẽ các hoạt động liên quan trên kho mã nguồn GitHub. Kể từ năm 2014, tổng số kho mã trên GitHub dùng Go làm ngôn ngữ chính đã tăng lên gấp hơn 4 lần, nếu chỉ xem xét các kho GitHub đang hoạt động thì tăng gần 5 lần. Ngoài ra, số bài đăng trên Reddit đề cấp đến Go cũng nhiều hơn, số liệu của Spectrum cho thấy tăng gấp 3 lần.

Một ngôn ngữ khác cũng liên tục thăng hạng kể từ năm 2014 là R, giờ ở vị trí thứ 5. R được nâng hạng nhờ việc xử lý được nhiều câu hỏi hơn trên site Stack Overflow – nhiều hơn khoảng 46% so với năm 2014. Tuy nhiên, điều quan trọng hơn đó là R được đề cập ngày càng nhiều trong các tài liệu khoa học. Việc xếp hạng Spectrum dựa nhiều vào dữ liệu từ IEEE Xplore, nguồn này lập chỉ mục hàng triệu bài báo khoa học, tiêu chuẩn, và sách trong cơ sở dữ liệu IEEE (Institute of Electrical and Electronics Engineers). Trong bảng xếp hạng năm 2015 của Spectrum chỉ có 39 tài liệu đề cập đến ngôn ngữ này, trong khi đó năm nay có đến 244 tài liệu.

Ngược với những bước tiến đáng kể của các ngôn ngữ nguồn mở như Go, Julia, R, và Scala, các ngôn ngữ phân tích dữ liệu độc quyền như Matlab và SAS lại rớt hạng: Matlab rớt 4 bậc so với năm 2014 còn SAS rớt 7 bậc. Tuy nhiên, điều quan trọng cần lưu ý là cả hai ngôn ngữ này cũng có tiến bộ; chỉ có điều chúng không tiến nhanh như một số ngôn ngữ thay thế vị trí của chúng.

Khi đối chiếu thứ hạng với việc làm, các ngôn ngữ được sử dụng nhiều như Java và Python chiếm ưu thế. Nhưng trong năm 2016 các nhà tuyển dụng quan tâm đến R và Scala nhiều hơn hẳn so với năm 2014. Trong năm 2014 chỉ có 136 việc làm yêu cầu Scala trên các website tuyển dụng CareerBuilder và Dice. Nhưng đến năm 2016 thì có tới hơn 631 việc làm, tăng hơn gấp 4 lần.

Sự tăng trưởng này gợi lên câu hỏi liệu R có thể lật đổ Python hay Java là những ngôn ngữ hàng đầu cho dữ liệu lớn. Tuy R đã có những bước tiến rất lớn trong vài năm qua, nhưng Python và Java thực sự là những tượng đài lớn. Ví dụ, số lượng việc làm Python gấp 15 lần yêu cầu tuyển dụng lập trình viên R. Và trong khi chỉ có 63.000 mã nguồn R mới trên GitHub trong năm qua, thì có đến gần 458.000 mã nguồn Python. Mặc dù R có thể tuyệt vời cho việc phân tích và đồ họa thống kê và rõ ràng phổ biến với các học giả nghiên cứu, nhưng Python có lợi thế đáng kể trong các môi trường ứng dụng thực tế: Nó tích hợp với các quy trình dữ liệu thực tế dễ dàng hơn, và vì là ngôn ngữ đa năng nên nó có phạm vi ứng dụng rộng hơn.

Những con số trên cho thấy mặc dù một số lập trình viên muốn đánh giá các ngôn ngữ chỉ thuần túy về các chỉ số kỹ thuật nội tại như sự gọn gàng của cú pháp hay mức độ sử dụng các lớp, nhưng sự phổ biến của một ngôn ngữ luôn phụ thuộc nhiều vào khả năng ứng dụng mà nó nhắm đến, hoặc là do thiết kế hoặc có sẵn các thư viện hỗ trợ.

Những công cụ mới của Windows 10


Lê Duy

(PCWorldVN) Microsoft liên tục chỉnh sửa Windows 10 và thêm các tính năng mới cho nó. Bài viết cho bạn biết những gì mới và những gì sắp có trong hệ điều hành phổ biến này.

Windows 10 vẫn chưa có cái dớp nào lớn từ khi nó xuất hiện đến nay, như lỗ hổng bảo mật, cập nhật bắt buộc hay quảng cáo gây khó chịu. Chí ít cho đến nay, người dùng có vẻ hài lòng về nó, và Microsoft cũng đã biết lắng nghe ý kiến phản hồi cho dù họ vẫn chưa quan tâm nhiều đến những phàn nàn.

Đa số phản hồi đều đến từ cộng đồng Windows Insider, là nhóm người dùng nhận được các bản Windows 10 mới nhất trước bất kỳ người dùng nào khác. Nhóm người này cũng có được những công cụ mới nhất mà Microsoft định đưa ra đại trà, hoặc cũng có thể không tung chúng ra. Điều đáng mừng là Microsoft đang cho thấy quyết tâm của họ biến Windows 10 thành một hệ điều hành mạnh mẽ, linh hoạt như đã từng hứa.

Các bản build Windows 10 Insider mới nhất có vài tính năng và cải tiến mà người dùng mong đợi từ lâu. Đây là những thứ mà chúng ta mong đợi có được trong bản kế tiếp.

Các extension trong Edge 

Một trong những than phiền nhiều nhất về trình duyệt mặc định của Windows 10, Microsoft Edge, là nó không hỗ trợ các ứng dụng extension (phần mở rộng) mà các trình duyệt cạnh tranh khác đều có. Còn những người dùng thử nghiệm Insider tỏ ra vui mừng khi cuối cùng bản Build 14291 mà Microsoft tung ra hồi giữa tháng 3 vừa qua đã có hỗ trợ tính năng này. Nhưng ban đầu, Edge cũng chỉ mới hỗ trợ 3 add-on là Mouse Gestures, Microsoft Translator và Reddit Enhancement Suite.

Phải mất thêm thời gian thì mới có được nhiều extension hơn, còn hiện tại mới chỉ có 3.
Có lẽ phải mất thêm thời gian để các nhà phát triển công cụ mở rộng này thử nghiệm và chỉnh sửa để chúng chạy ổn định, mượt mà hơn rồi đưa lên Windows Store. Đây là bước đi đúng đắn và Microsoft cũng cho biết cũng có vài add-on khác đang trong giai đoạn phát triển, gồm AdBlock, AdBlock Plus, Amazon, LastPass và Evernote.

Cải tiến khác cho Edge

Microsoft Edge còn chặng đường khá dài phía trước nếu muốn bắt kịp Firefox và Chrome, nhưng Microsoft rõ ràng đang muốn tăng tốc trên con đường này khi đưa ra vài chỉnh sửa rất tốt. Từ bản build 14267, nhấn chuột phải vào thanh Favourites (bạn cần kích hoạt trong Settings, Favourites Settings) sẽ chỉ hiện các biểu tượng “favicon” (không kèm chữ) của các trang web mà bạn đánh dấu (bookmark) và cho bạn thêm các thư mục mới. Việc tải file từ Internet về cho phép bạn chọn nơi cần lưu file trên PC và Edge có thể bảo vệ tính riêng tư bằng cách tự động xóa dữ liệu duyệt web ngay khi bạn đóng trình duyệt. Để kích hoạt tính này này lại, bạn chỉ cần nhấn vào nút có biểu tượng dấu ngoặc (...) ở góc trên bên phải màn hình. Bạn có thể vào Settings và nhấn chọn nút “Choose what to clear” bên dưới “Clear browser data”.

Trình duyệt Edge hiện thời có thể tự động xóa lịch sử trình duyệt ngay khi bạn đóng cửa sổ.
Ngoài bổ sung hỗ trợ add-on, bản Windows 10 Build 14291 cũng thêm khả năng ghim (pin) tab trong Edge để người dùng dễ dàng truy cập, và chọn lựa “Paste and go” để bạn tiết kiệm thời gian khi copy và dán URL vào thanh trình duyệt.
Thực chất những tính năng lặt vặt này không có gì đột phá và chỉ nói lên một điều là Edge đang cố sức bắt kịp với những trình duyệt khác mà thôi. Nhưng dù gì đây cũng là dấu hiệu tích cực trong các bản build gần đây.

Windows Defender Offline 

Windows 10 có một công cụ chống virus tích hợp là Windows Defender. Có còn hơn không, vì có vẻ như nó không hiệu quả như các công cụ chống virus khác. Một phần vấn đề là máy tính của bạn phải online thì mới có thể sử dụng nó được. May mắn là Microsoft đang có kế hoạch cải tiến công cụ này bằng cách cho nó thêm chế độ chạy offline. Điều này cho phép người dùng quét malware mà không cần có kết nối Internet.

Windows Defender Offline từng được giới thiệu từ năm 2011 và cập nhật lần cuối năm 2012, nhưng cuối cùng, nó lại được giới thiệu lần nữa trong bản Build 14271.

Công cụ Windows Defender cập nhật có thêm chức năng quét virus offline.
Nhận diện nhạc bằng Cortana 

Trợ lý ảo Cortana của Microsoft hiện đã có thể nhận diện bản nhạc bạn đang nghe. Trong bản Build 14267 hồi giữa tháng 2 vừa qua, Microsoft bổ sung một biểu tượng tìm kiếm nhạc ở góc trên bên phải của Cortana. Tính năng này cho phép Cortana chuyển nhanh sang chế độ nghe nhạc và nó có thể nhận biết bài hát và ca sỹ.

Bạn muốn biết tên một bài nhạc đang nghe nào đó, Cortana có thể giúp.
Dĩ nhiên, bạn không cần đến Cortana hay là thành viên của Windows Insider thì mới có được tính năng này, vì những dịch vụ tương tự như Shazam (www.shazam.com) đã có từ lâu. Bạn có thể cài đặt ứng dụng Shazam cho Windows Phone, và ứng dụng này cũng chạy được trên Windows 8 đến Windows 10, cũng như trên nền tảng Android và iOS.

Redstone là gì?

Theo Microsoft, Windows 10 là phiên bản mới nhất của Windows, nghĩa là hệ điều hành này vẫn còn nằm trong chu trình phát triển sản phẩm, nghĩa là nó sẽ còn được bổ sung tính năng và điều chỉnh. Phiên bản Windows 10 đầu tiên có tên mã là Threshold, lấy theo tên một hành tinh trong game Halo. Vào tháng 11 năm ngoái, Threshold 2 xuất hiện, là bản Windows 10 ổn định (Build 10586), sau này đổi lại tên thành November Update.


Sau lần cập nhật đó, Microsoft chuyển sang dùng tên mã là Redstone (có lẽ sau khi Microsoft sở hữu được tựa game Minecraft, họ đã lấy tên chất liệu Redstone trong game này đặt cho bản Build của Windows, như trong hình dưới), và đây là thời điểm mà Microsoft mở cửa cho thành viên tham gia Windows Insider. Hãng dự kiến sẽ tung ra bản Redstone 1 vào tháng 6 năm nay và các bản cập nhật Windows 10 đều hoàn toàn miễn phí và Windows 10 chính thức sẽ có mọi tính năng mới kể từ bản Threshold 2.

Bản cập nhật tiếp theo sẽ là Redstone 2, dự kiến vào mùa xuân 2017 và là bản cập nhật trực tiếp của Redstone 1, có nghĩa là tính năng nào không được cập nhật trong Redstone 1 sẽ được cập nhật trong Redstone 2.

Cho Cortana quản lý lịch làm việc

Một trong những tính năng khéo léo nhất của Cortana là hiểu được cách nào, và quan trọng hơn là khi nào bạn thích làm việc. Ví dụ, nếu trong công việc văn phòng bạn thường phải dự họp thì Cortana sẽ thông báo cho bạn về bất kỳ điều gì có vẻ bất thường, như các buổi vừa ăn sáng vừa họp hay họp buổi tối, hoặc những lịch họp ở ngoài văn phòng. Công cụ này cho bạn sắp xếp lại lịch làm việc trong ngày sao cho phù hợp nhất. Và đây mới chỉ là bước đầu tiên trong khả năng quản lý lịch làm việc cao cấp mà Microsoft dự kiến sẽ bổ sung trong tương lai.

Cortana hoạt động mượt mà với Calendar để nhắc bạn những sự kiện sắp đến.
Cortana nhắc nhở nhiều thứ khác

Bây giờ, Cortana giúp bạn nhớ nhiều thứ, như tên của cuốn sách bạn muốn đọc, một công việc vặt nào đó bạn cần làm mà không phải thiết lập ngày giờ. Bạn có thể thêm những chi tiết cụ thể cho nó như địa điểm, thời gian hay bạn bè để về sau nó tự động nhắc bạn khi có thứ gì đó liên quan đến các chi tiết đó. Microsoft cho rằng trong các phiên bản Build tới, Cortana sẽ có thể trích thông tin theo yêu cầu, giống như một trợ lý thực thụ.

Gửi hình ảnh trong Skype

Bây giờ, bạn có thể dễ dàng đính kèm hình ảnh trong tin nhắn Skype và lấy ảnh qua ứng dụng Camera. Khi bạn đang viết tin nhắn cho ai đó, bạn chỉ việc nhấn vào biểu tượng kẹp giấy ở góc dưới bên trái để tìm hoặc chụp ảnh cần gửi.

Bạn có thể gửi hình ảnh qua Skype dễ dàng.
Cải tiến ứng dụng

Các ứng dụng cài đặt sẵn trên Windows có vài cập nhật hữu ích. Ứng dụng Maps được làm lại hoàn toàn và bây giờ nó có thêm chức năng thực hiện nhiều tìm kiếm cùng lúc để bạn có thể xem vài tìm kiếm trên một bản đồ. Maps cũng có hiển thị một số thành phố phổ biến ở định dạng 3D và có chỉ đường chi tiết dựa trên Cortana.

Ứng dụng Photos hiện nay tích hợp thêm Sway, là ứng dụng dựng truyện mới của Microsoft (www.sway.com). Để dùng được tính năng này, bạn mở một album hình ảnh trong Photos, và nhấn vào nút "Tell your story with Sway".

Còn ứng dụng Mail và Calendar cũng được cập nhật, cho bạn kéo thả file đính kèm vào trong email, xem lịch theo tuần, tắt chức năng xem trước trong danh sách email và loại bỏ thư rác chỉ bằng cách nhấn chuột phải, chọn “Move to Junk”.

Ứng dụng Movies & TV cũng được cập nhật, cho bạn chọn phụ đề, còn ứng dụng Groove cải thiện khả năng đồng bộ với các thiết bị khác.
Bạn không cần phải là thành viên của Windows Insider thì mới có được những tính năng mới bên trên, bạn chỉ cần cập nhật bản mới nhất của các ứng dụng trên là được.

Cải thiện giao diện đăng nhập

Một thay đổi đáng chú ý trong bản Build 14279 mà Microsoft tung ra hồi đầu tháng 3 vừa qua là ảnh nền cho màn hình đăng nhập và màn hình khóa là như nhau, giống như trên điện thoại thông minh. Tuy vậy, điều này không có nghĩa là bạn không thể dùng tính năng Windows Spotlight để tùy chỉnh lại màn hình khóa. Microsoft hứa là sẽ tạo cho màn hình nhất quán hơn trong các bản Build sắp đến và sẽ làm cho màn hình khóa và màn hình đăng nhập mượt mà hơn.

Bạn có thể cấu hình màn hình khóa và màn hình đăng nhập trong Windows 10.
Một ghi nhận khác là Windows cần kích hoạt trước khi bạn có thể cá nhân hóa PC theo cách này.

Windows 10 Mobile

Microsoft nhắm Windows 10 cho điện thoại thông minh, cũng như PC và máy tính bảng. Nhưng trong khi phiên bản cho PC và máy tính bảng đã xuất hiện hồi tháng 7 năm ngoái thì Windows 10 Mobile vẫn còn chưa thành công với điện thoại. Mặc dù thành viên Windows Insider có thể truy cập được một phiên bản dùng trước của Windows 10 Mobile dành cho các điện thoại tương thích Windows (như Lumia 950 và 950 XL) nhưng bản đầy đủ vẫn bị Microsoft trì hoãn. Cuối cùng, Microsoft đã chính thức tung ra bản Mobile vào ngày 17/3 vừa qua, mặc dù chỉ có một số thiết bị được hỗ trợ và danh sách ít ỏi thiết bị này được cộng đồng Insider đánh giá cao.

Windows 10 Mobile đã xuất hiện nhưng chỉ hỗ trợ cho danh sách thiết bị mà Microsoft công bố.
Những tính năng mới có trong hệ điều hành di động này gồm:
  • Continuum: cho phép bạn dùng điện thoại Windows 10 Mobile như PC, nhưng sức mạnh tính toán rõ ràng là chậm hơn nhiều.
  • Tùy biến biểu tượng tile: bạn có thể thêm ảnh nền, thêm hình ảnh vào từng tile riêng lẻ.
  • Trình duyệt Edge: bản trình duyệt di động của Microsoft hoạt động tốt, có thêm chế độ Reading List.
  • Action Centre: quét tay từ trên xuống sẽ hiển thị các thiết lập quan trọng như Wi-Fi, Bluetooth, khóa màn hình và Settings.
  • Transfer My Data: ứng dụng này giúp bạn truyền dữ liệu dễ dàng từ Android và iOS sang.
  • Windows Hello: mở khóa thiết bị sử dụng công nghệ nhận diện mống mắt hoặc vân tay.
Không phải điện thoại thông minh Windows nào cũng có được đầy đủ những tính năng liệt kê bên trên, như Continuum và Hello đều cần cấu hình phần cứng cao hơn, mà chỉ có những điện thoại cao cấp về sau mới hỗ trợ.

Tính năng nào còn thiếu?

Mặc dù Microsoft đã cố gắng xây dựng Windows 10 thật hoàn chỉnh nhưng hệ điều hành này vẫn còn thiếu vài tính năng quan trọng.

Cần nhiều extention hơn cho Edge

Như đề cập trong bài, các ứng dụng mở rộng extention cuối cùng đã xuất hiện trên Edge nhưng có lẽ phải mất một khoảng thời gian nào đó trước khi những extention ưa thích của bạn xuất hiện trên Windows Store, còn hiện thời số lượng extention còn quá ít. Hơn nữa, chưa có gì đảm bảo các nhà phát triển sẽ thích tạo các phiên bản ứng dụng extention cho Edge.

Windows Media Center/DVD player

Microsoft loại bỏ Media Center ra khỏi Windows 10, cho rằng ứng dụng này ít người dùng và thay vào đó hãng đưa ra một ứng dụng DVD rất cơ bản tên là Windows DVD Player với mức giá 14,99 USD trên Windows Store. Trong khi đó, trên Internet lại có vô vàn ứng dụng thay thế rất tốt cho công cụ này.

Hỗ trợ nhiều định dạng nén hơn

Mặc dù Windows có hỗ trợ mở file nén định dạng ZIP nhưng không có dấu hiệu nào cho thấy Windows 10 sẽ tương thích tốt với các định dạng nén phổ biến khác, ví dụ như RAR. Điều này có nghĩa là nhiều người dùng vẫn cần phải cài đặt thêm phần mềm nén/giải nén file, như PeaZip (www.peazip.org).

Bộ gỡ cài đặt thống nhất

Để gỡ bỏ các ứng dụng mặc định của Windows 10, bạn vào Settings, Apps & Features, nhưng còn các ứng dụng khác, bạn phải vào Control Panel, Programs and Features. Bạn cũng có thể chọn gỡ một chương trình nào đó ngay tại menu Start bằng cách nhấn chuột phải vào nó hay vào tile đó, nhưng điều này không có nghĩa là Windows 10 sẽ chạy file uninstall liên quan. Có vẻ như Microsoft cần sắp xếp lại cách gỡ bỏ ứng dụng sao cho thuận tiện nhất.

Ứng dụng xử lý file rác

Công cụ Disk Cleanup của Windows 10 rất cơ bản nếu so với những công cụ khác như CCleaner (www.piriform.com/ccleaner). Có vẻ như Microsoft chưa để mắt lắm đến một ứng dụng dọn dẹp file rác cho hệ điều hành mới của họ.

5 bài học từ những lập trình viên kỳ cựu

Ngành công nghiệp máy tính có sự đam mê kỳ lạ đến mức sùng tín với công nghệ mới, mô hình mới, và tất nhiên cả lập trình viên mới
Thanh Phong

(PCWorldVN) Tuổi trẻ có thể là điều mà bộ phận nhân sự muốn, nhưng viết code nhanh thì không ai bằng các chuyên gia lập trình lão luyện.

Một thách thức với các bộ phận nhân sự và tuyển dụng ở Silicon Valley: Họ không thể hỏi tuổi của ứng viên vì sẽ bị kiện phân biệt đối xử (nhiều công ty đã thua kiện trong những năm qua). Thay vì thế, họ dùng các thủ thuật như trao đổi qua lại ngầm liên hệ đến bộ phim hay tình huống hài hước nào đó để xem ứng viên có hưởng ứng trò đùa không, qua đó đánh giá ứng viên có phù hợp với văn hóa công ty hay không.

Ngành công nghiệp máy tính có sự đam mê kỳ lạ đến mức sùng tín với công nghệ mới, mô hình mới, và tất nhiên cả lập trình viên mới. Thực tế công nghệ cũ không bao giờ chết hẳn. Các phát minh cũ như mainframe (máy tính lớn) có thể không còn nổi đình nổi đám, nhưng chúng vẫn làm việc. Ở thời điểm trung tuần tháng 4/2016, trên trang web việc làm Dice số nhu cầu tuyển dụng với từ khóa "Cobol" (522) nhiều hơn gấp năm lần "OCaml" (11), "Erlang" (52) và "Haskell" (27) gộp lại.

Việc phân biệt tuổi tác khá phổ biến, có những lý do của nó. Cái đầu của các lập trình viên trẻ không bị lấp đầy những ý tưởng cũ, do đó họ học nhanh hơn. Những người non nớt tập trung và siêng năng hơn. Họ không bị những việc khác làm sao lãng, như gia đình, hoặc ít nhất thú tiêu khiển của họ gắn với PC và smartphone. Điều này có thể đúng nhưng cũng có thể không (tìm bằng chứng không khó).

Tuy nhiên những lập trình viên kỳ cựu lại có sự thông thái, điều mà không thể đạt được chỉ bằng cách đơn giản xem một bài thuyết trình của TED (Technology – Entertainment - Design) trên YouTube hoặc lướt qua một khóa học trực tuyến (MOOC). Họ hiểu rõ hơn về cách máy tính làm việc vì từng làm việc với các máy tính dùng bảng công tắc. Thời đó không có môi trường phát triển tích hợp (IDE) và trình biên dịch giúp tiết kiệm công sức. Nếu không xây dựng ứng dụng đúng ngay từ đầu, nó sẽ không làm việc. “Bọn trẻ” phải mất nhiều năm mới biết điều này.

Dưới đây là 5 bài học có giá trị trường tồn từ các “già làng” lập trình.

Hợp ngữ (Assembler)

Hầu hết những người tuổi dưới 50 không biết câu lệnh như “mov ah, 09h” hoặc “cmp eax, ebx”. Nhiều người cho rằng máy tính mặc nhiên đòi hỏi nhiều dấu ngoặc nhọn ( { ) vì các ngôn ngữ lập trình phổ biến sử dụng chúng để phân định các khối mã lệnh. Ngay cả những người hiểu rằng các ngôn ngữ như Java hay C phải được dịch sang mã nhị phân cũng thường ít có kinh nghiệm thực hiện.

Nhiều lập trình viên lớn tuổi đã trải qua những ngày viết mã ‘assembly’ (tên được đặt cho phiên bản mã máy nhị phân người-có-thể-đọc-được). Một số người có thể chuyển mã ‘assembly’ bằng tay và biến nó thành số Hex (thập lục phân) để có thể bật các công tắc trên bảng điều khiển lập trình máy tính.

Việc viết mã ‘assembly’ chẳng cao siêu gì và cũng không thật sự cần thiết. Đó là công việc nặng nhọc, mất thời gian, lặp đi lặp lại và rất dễ mắc lỗi. Các trình biên dịch hiện nay đủ khả năng nhận biết các cú pháp phức tạp; thậm chí một số nhà viết trình biên dịch còn khoe có thể tạo ra mã tốt hơn người.

Điều đó có thể đúng, nhưng lợi ích của việc học hợp ngữ (dù chỉ chút ít) đó là bạn hiểu cách thức máy tính làm việc. Các ngôn ngữ bậc cao có thể cung cấp rất nhiều các ‘con đường tắt’ nhanh chóng cho các tác vụ thông thường, chẳng hạn như ghép chuỗi, nhưng chúng có thể là một cái bẫy khiến các lập trình viên nghĩ rằng phép toán cộng (+) cần thời lượng như nhau cho dù cộng hai số nguyên hay ghép hai chuỗi. Không phải vậy, thời gian khác biệt đáng kể, và những người biết mã ‘assembly’ và cách tác vụ JMP (jump – lệnh nhảy) hoạt động sẽ có quyết định đúng đắn.

Hiểu được cách các đối tượng được đưa vào bộ nhớ và được nạp vào CPU (bộ xử lý) khi cần thiết giúp ích rất nhiều trong việc giảm thiểu việc sao chép và tính toán quá mức làm chậm chương trình. Những người lớn lên cùng hợp ngữ có thể không nhớ nhiều về cách viết mã x86, nhưng họ có bản năng nhắc nhở khi làm điều gì đó mất thời gian. Những người trẻ tuổi không có được bản năng đó, trừ khi họ tự đào tạo đúc kết kinh nghiệm.

Âm thanh và đèn hiệu

Những người bắt đầu nghề lập trình với máy tính cá nhân người dùng đơn như Altair hay Sol 20 mỗi lúc chỉ chạy một khối mã có thể lúc đầu ghét Unix. Lý do? "Máy tính Unix khởi chạy một cái gì đó bất cứ lúc nào. Bạn thấy những chiếc đĩa mềm khởi động nhưng không biết tại sao".

Điều này khiến lập trình viên khó chịu vì mất đi khả năng hiểu biết máy tính đang làm gì. Không ai thực sự biết những gì đang xảy ra trong chiếc máy tính hiện đại. Có vô số phần mềm chạy trên 4 hoặc 8 lõi vi xử lý. Virus và sâu có thể bám trụ mãi trong máy mà người sử dụng không hề nhận thấy sự trì trệ.

Các lập trình viên kỳ cựu biết cách quan sát các manh mối thị giác và thính giác để gỡ lỗi chương trình. Họ theo dõi đèn hiệu ở các jack cắm Ethernet RJ-45 nhấp nháy khi dữ liệu đang truyền. Họ lắng nghe đĩa cứng và biết khi nào đĩa bắt đầu đổi rãnh, một dấu hiệu cho thấy có cái gì đó đọc hoặc ghi lên đĩa. Những người thực sự giỏi có thể nhận biết sự khác biệt giữa việc ghi tạm lên đĩa xảy ra khi bộ nhớ đầy và việc đọc ghi liên tục của tác vụ lập chỉ mục.

Giá trị của các manh mối này đang mờ dần khi đĩa cứng bị thay bằng ổ đĩa trạng thái rắn (SSD) và dữ liệu truyền không dây ngày càng nhiều thay vì thông qua các router với đèn nhấp nháy. Nhưng miễn là điện thoại thông minh có chỉ báo hiển thị khi dữ liệu đang truyền thì những kỹ năng như thế vẫn có đất dụng võ.

Thao tác trên bit

Ngày xưa, các lập trình viên gom 8 giá trị boolean (0 hay 1) khác nhau thành một byte. Họ thao tác từng bit một vì không muốn lãng phí.

Các cấu trúc dữ liệu hiện đại thì ngược lại, hết sức lãng phí. XML chứa đầy các thẻ có tên dài, mỗi thẻ lại có một thẻ đóng có thêm một dấu gạch chéo. Trong các tập tin XML hiện đại thường hơn 90% là những thứ thêm vào để đáp ứng các quy tắc phân tích cú pháp thẻ phức tạp.

JSON được xem là một cải tiến vì nó nhỏ hơn một chút, chỉ đơn giản dùng dấu ngoặc nhọn thay thẻ đóng. Nhưng hiện vẫn còn quá nhiều dấu nháy kép trong các thẻ và chuỗi.

Tin tốt là các thuật toán nén hiện đại có thể thu gọn khá tốt các cấu trúc dữ liệu. Nhưng chúng không bao giờ có thể xử lý được hết tất cả. Các tay lão làng biết cách tránh đưa vào những thứ trên ngay từ đầu. Đó là lý do chương trình như MS-DOS 3.0 có thể chạy nhanh nhẹ trong phân vùng không quá 32MB. Đó là những năm đầu thập niên 1980, khi mà máy tính cá nhân đã phổ biến và cuộc cách mạng máy tính cũng đã qua giai đoạn trứng nước. Trước đó nữa, chương trình ở thập niên 1970 thậm chí còn nhỏ hơn. Chương trình ở thập niên 1960 thì nhỏ đến đáng kinh ngạc.

Phép toán nhị phân

Các tác vụ kiểm tra và bật tắt bit cần thiết đối với lập trình viên thời kỳ đầu. Một số tác vụ chậm đến nỗi lập trình viên đã phải xoay xở đủ mọi cách để xử lý. Và cách tốt nhất là biết phép chia hai tương đương với việc dịch chuyển một số nhị phân sang phải, giống như việc chia cho 10 là dịch chuyển một số thập phân sang phải.

Việc dịch chuyển các bit là tác vụ thông thường trên CPU (bộ xử lý), và nó thường nhanh hơn hẳn so với phép chia cơ bản. Và các lập trình viên giỏi tận dụng điều đó để viết chương trình chạy nhanh hơn, dùng phép dịch chuyển bit thay cho phép nhân và chia.

Tích góp kinh nghiệm

Trên nhiều bộ xử lý đời đầu, một số tác vụ mất nhiều thời gian hơn nhiều so với tác vụ khác. Trên CPU 8086, phép chia một số mất khoảng 80-190 chu kỳ xung đồng hồ, trong khi phép cộng hai số chỉ mất 3 chu kỳ. Ngay cả khi CPU chạy ở nhịp xung 5MHz thì điều đó vẫn tạo nên một sự khác biệt lớn khi thực hiện các tác vụ lặp đi lặp lại.

Các lập trình viên lớn tuổi biết rằng không phải tất cả các câu lệnh thực hiện trong cùng một khoảng thời gian như nhau. Họ hiểu rằng tính toán không phải là miễn phí, và không phải mọi câu lệnh tương đương nhau. Chọn sai tác vụ và máy tính sẽ chạy chậm ngay.

Mọi người quên rằng việc lựa chọn sai kiểu dữ liệu cũng có thể gây hậu quả. Sử dụng biến “long” (32 bit) hoặc “double” (64 bit) có thể xử lý chậm hơn. Sử dụng cấu trúc dữ liệu sai có thể khiến chương trình chạy ì ạch.

Nhiều bạn trẻ nghĩ rằng việc tính toán là tức thời và CPU có thể thực hiện số lượng vô hạn phép tính trong chớp mắt. người lớn tuổi nhớ việc công trừ nhân chia sẽ khiến CPU lăng xăng chậm chạp. Tất cả những điều nho nhỏ đó thu thập dần qua nhiều năm tìm tòi, gỡ lỗi và chỉnh sửa code. Cách duy nhất để có được kiến thức này là trải nghiệm với thời gian.

Nguồn mở: Hiểm họa trong ứng dụng doanh nghiệp

Hầu hết mọi người dùng nguồn mở, có thể lên đến 99%, chỉ có 1% code là tự viết.
Thanh Phong

(PCWorldVN) Việc đóng cửa thư mục tra cứu những lỗ hổng nguồn mở hồi đầu tháng 4/2016 đặt ra thách thức bảo mật cho các nhà phát triển quen dùng lại phần lớn mã nguồn có sẵn miễn phí.

OSVDB (Open Sourced Vulnerability Database) là nguồn cung cấp miễn phí bản vá những lỗ hổng đã biết dành cho các nhà phát triển phần mềm.

Không có nguồn này thì vẫn còn các nguồn khác. Nhưng việc đóng cửa OSVDB nêu lên một trong những vấn đề trong cách sử dụng nguồn mở, đặc biệt trong việc phát triển ứng dụng doanh nghiệp: thường sau khi được tích hợp vào ứng dụng, nó hầu như không hề được cập nhật để sửa chữa các lỗ hổng phát hiện sau đó.

Đây là vấn đề lớn. Mark Curphey, Giám đốc điều hành SourceClear, một công ty non trẻ tập trung vào việc bảo mật phần mềm nguồn mở, cho rằng “hầu hết mọi người dùng nguồn mở, có thể lên đến 99%, chỉ có 1% code là tự viết”.

Thực sự có lẽ chỉ khoảng 75%, nhưng như thế vẫn đáng kể, theo Mike Pittenger, Phó chủ tịch chiến lược cho Black Duck, hãng cung cấp dịch vụ giúp vá tự động các lỗ hổng nguồn mở cho khách hàng.

Sử dụng mã nguồn mở miễn phí trong ứng dụng doanh nghiệp tiền ẩn nhiều rủi ro bảo mật
Các công ty khác cung cấp dịch vụ tương tự, như WhiteSource, thì dùng thông tin của OSVDB cho mục đích thương mại. Hãng này dò tìm ra các thành phần nguồn mở trong các ứng dụng của khách hàng và cảnh báo khi có đoạn code “dễ tổn thương” được thêm vào dự án phần mềm đang triển khai hoặc khi có các lỗ hổng mới ảnh hưởng đến phần mềm hiện có của khách hàng.

Yêu cầu cấp thiết phát triển phần mềm nhanh chóng dẫn đến việc sử dụng phổ biến nguồn mở. Nó có sẵn, thường là miễn phí và được cả cộng đồng tham gia chỉnh sửa. Nhưng sự gấp rút đó có thể dẫn đến việc các phiên bản của phần mềm nguồn mở được sử dụng không có hồ sơ đầy đủ, khiến cho các chuyên gia bảo mật phải mò mẫm tìm hiểu các ứng dụng trong công ty của mình có lỗ hổng nào hay không.

Trừ khi các nhà phát triển tự giác ghi lại nguồn mở mà họ sử dụng, còn không việc tập hợp thông tin sau đó nói chung phụ thuộc vào “bộ nhớ của nhóm phát triển”.

Hacker nhận thức rõ việc này. Chúng có thể theo dõi GitHub để xem ai đóng góp mã nguồn gì và mã nguồn của ai có vấn đề. Sau đó, chúng lần theo những người quan tâm mã nguồn đó để tìm hiểu những dự án họ đang làm việc, hy vọng họ sẽ sử dụng một số mã nguồn có lỗ hổng đã tìm thấy trên GitHub.

Gần đây, một coder (lập trình viên) JavaScript bực mình do việc tranh chấp tên gọi một trong những gói phần mềm của mình đã trả đũa bằng cách gỡ bõ những mã nguồn mở đóng góp khỏi một thư viện dùng chung, làm ảnh hưởng đến rất nhiều nhà phát triển dựa trên chúng. Do nhiều người phản đối, ban quản trị thư viện đã đi ngược lại mong muốn của coder và tái đăng 11 dòng mã mà nếu thiếu sẽ gây rất nhiều phiền toái.

Vấn đề được giải quyết, ít nhất là trong trường hợp này. Nhưng vấn đề tiềm ẩn - thói quen dùng lại mã nguồn mở trong phần mềm mới - vẫn còn.

Không chỉ nguồn mở

Vấn đề mở rộng sang phần mềm thương mại, và các hãng phần mềm buộc phải tuân theo một chuẩn mực cao. Họ phải công khai những nguồn mở trong phần mềm của mình, giám sát chúng và phát hành bản vá lỗi khi lỗ hổng mới được phát hiện.

Việc giám sát chuỗi cung ứng phần mềm trong các ứng dụng phức tạp là rất quan trọng. Mới tháng trước các nhà nghiên cứu tìm thấy hơn 1.400 lỗ hổng trong một tủ y tế nối mạng do phần mềm của bên thứ ba trong gói giải pháp bao gồm Microsoft Windows XP, Symantec pcAnywhere và SAP Crystal Reports 8.5.

Do sự việc quan trọng nên cuối tháng này Cơ quan quản lý Thực phẩm và Dược của Mỹ (FDA) sẽ bắt đầu xem xét dự thảo về các quy định cho thiết bị y tế và cách thức đối phó với những lỗ hổng phần mềm sau khi các thiết bị y tế xuất xưởng.

Vấn đề bảo mật mã nguồn có thể mở rộng sang các thiết bị mạng. Nổi cộm như vụ Juniper công bố thiết bị NetScreen của hãng bị tấn công cửa hậu (backdoor) và bị chèn mã trái phép vào hệ điều hành hồi tháng 12 năm rồi. Lý do vẫn còn là một bí ẩn - ít nhất là với công chúng. Thoạt nhìn có vẻ như ai đó đã cố tình cài đặt “cửa hậu” để tùy ý khai thác, nhưng các lỗ hổng cũng có thể là kết quả của việc viết code kém, quy trình kiểm soát chất lượng không tốt hoặc dấu lỗi.

Theo Curphey, để điều tra cần phải xem xét cái gọi là đặc tính di truyền của code - xuất xứ của code và người viết nó - nhằm xác định cách thức xảy ra và liệu các đặc tính di truyền này có tạo thêm mối đe dọa khác hay không. "Đó có thể là một nhà phát triển bất hảo. Nếu vậy, nhà phát triển đó còn nhúng tay vào những thứ gì khác?".

Đó là một trong những vấn đề cơ bản của bảo mật phần mềm, nhưng việc vá lỗi thường bị bỏ qua hoặc trì hoãn cho đến lúc thuận tiện hơn. Vậy là tạo cơ hội cho tin tặc, chúng cũng nhận thức được khuynh hướng này của những người quản trị mạng, theo John Pironti, chủ tịch của IP Architects.

Trong trường hợp NetScreen của Juniper, có khả năng nhiều khách hàng sử dụng thiết bị đã không cài đặt các bản vá lỗi một thời gian dài.

Có những bước cần làm để giảm nguy cơ:
  • Nắm rõ phần mềm mình mua có thành phần nguồn mở hoặc của bên thứ ba nào.
  • Yêu cầu hãng phần mềm cung cấp tài liệu về cách thức họ theo dõi liên tục các thành phần mà họ sử dụng và cách thức vá các lỗ hổng. Mức độ trưởng thành quy trình phát triển phần mềm phát triển của họ?
  • Nếu có một thư viện thương mại của bên thứ ba được sử dụng, thì nhà cung cấp có cam kết đảm bảo các thành phần bị lỗi được vá không?
  • Tìm hiểu xem nhà phát triển có sử dụng các mô hình phân tích để kiểm tra khả năng đứng vững của phần mềm trước các mối đe dọa không?
  • Đặt ưu tiên các ứng dụng cần được giám sát và thực hiện nghiêm ngặt dựa trên mức độ quan trọng của ứng dụng đối với doanh nghiệp và giá trị của các nguồn lực liên quan.
Doanh nghiệp cần phải thiết lập và duy trì liên tục các chương trình nâng cấp và vá lỗi phần mềm. "Hôm nay nó tốt, nhưng ngày mai có thể khác ".

Và khi mua các ứng dụng doanh nghiệp nên tra hỏi các nhà phát triển về việc bảo mật trong quy trình của họ, cách họ sàng lọc mã nguồn và chương trình vá lỗi sản phẩm khi đã trao cho khách hàng. "Chúng ta cần phải nâng cao sự kỳ vọng đối với các nhà cung cấp phần mềm", Pironti nói.

Google mở rộng kinh doanh điện toán đám mây

Giám đốc mảng điện toán đám mây của Google, Diane Greene, đang muốn mở rộng quy mô gấp 4 lần và thêm tính năng vào điện toán đám mây của Google, nhằm cạnh tranh với Microsoft và Amazon.
Bùi Lê Duy

(PCWorldVN) Trong khi Amazon và Microsoft thương mại hóa mảng điện toán đám mây từ lâu thì Google chậm chân hơn, nhưng lại đang có kế hoạch mở rộng gấp 4 lần hiện nay.

Google đang tập trung vào điện toán đám mây, nhưng ở cấp độ cao hơn. Công cụ trí tuệ nhân tạo (AI) và phân tích nền đám mây của Google vượt hơn công nghệ của Amazon.com và Microsoft. Nhưng hôm 23/3 vừa qua, Chủ tịch Google là Eric Schmidt phải lên bục phát biểu trước hàng ngàn nhà phát triển ứng dụng đám mây và giảng giải cho họ khoảng 20 phút về sức mạnh của phần mềm Google, và tại sao sản phẩm đám mây của Google đáng được quan tâm nhiều hơn.

Trong khi Google tạo ra rất nhiều phần mềm và công cụ phân tích nền tảng cho điện toán đám mây từ thời những năm 1990 đến nay thì Amazon mới là doanh nghiệp đầu tiên thương mại hóa công cụ điện toán đám mây cách nay 1 thập kỷ, đó là Amazon Web Service.

Sau đó 2 năm, Google mới đáp trả một cách rất từ tốn với Google App Engine, buộc khách hàng phải cho Google trực tiếp quản lý nguồn tài nguyên tính toán, thay vì khách hàng có quyền thuê nguồn tài nguyên như của Amazon (như tăng nhân CPU, RAM, dung lượng lưu trữ...) Snapchat là một trong những khách hàng lớn của App Engine của Google.

Hôm 23/3, Schmidt có đề cập trong hội nghị về điện toán đám mây tổ chức thường niên tại San Francisco, rằng: "Nhận thức của tôi có điều gì đó chưa đúng, ở mức cơ bản. Chúng tôi đã không bước đúng bậc thang vốn dành cho mình."

Năm ngoái, Google đã có được 500 triệu USD lợi nhuận trong 80 tỷ USD doanh thu từ điện toán đám mây, so với doanh thu 1,1 tỷ USD của Microsoft và gần 8 tỷ USD của Amazon.

Hãng Gartner cho rằng thị trường điện toán đám mây trị giá 20 tỷ USD có thể đạt tốc độ phát triển đến 35% trong năm tới. Tháng 11 vừa qua, Google thuê Diane Greene, một trong những giám đốc của họ từ năm 2012, củng cố thêm thị phần điện toán đám mây của họ.

Google Compute Engine được tung ra hồi năm 2012 trông rất giống với dịch vụ của Amazon. Tuy vậy, Google đã chậm chân trong việc mang nó tới cho các khách hàng tiềm năng. Greene là người làm việc cả một thập kỷ với vai trò CEO của VMware, là hãng tiên phong trong điện toán đám mây, cho rằng điều này đang thay đổi: bà đang tuyển thêm nhiều nhân viên về tiếp thị và bán hàng, trong đó có một giám đốc chuyên về tiếp thị. Theo Schmidt, trong vài năm tới, Google sẽ tuyển thêm hàng ngàn nhân viên cho mảng điện toán đám mây của họ.

Tham vọng hơn, Google còn cho biết họ đang có kế hoạch mở ra 12 "vùng" đám mây mới trên khắp thế giới trong vòng 18 tháng tới, mỗi vùng đám mây bao gồm ít nhất là một trung tâm dữ liệu.

Hiện thời, Google đã có 4 vùng như vậy. Kế hoạch này sẽ giúp Google sánh ngang với kiến trúc hạ tầng của Amazon khi Amazon hiện có 12 trung tâm dữ liệu trên toàn cầu và họ đang có kế hoạch mở thêm 5 trung tâm dữ liệu nữa.

Google cũng đang tất bật tạo thêm nhiều tính năng mới cho các công cụ điện toán đám mây phục vụ doanh nghiệp, nhất là những công cụ hỗ trợ về back-end như công cụ giám sát các điều khoản và các thiết lập nâng cao về tính riêng tư. Greene cho rằng các bản nâng cấp tiếp theo sẽ tập trung vào công nghệ machine learning và phân tích dữ liệu, trong đó có dữ liệu về hệ thống chuyển ngữ và tag bằng hình ảnh. Greene nói rằng: "Cách nay 2 năm, vấn đề khó khăn là làm sao lưu trữ mọi loại dữ liệu như vậy mà không bị hư hại. Nhưng nay, vấn đề là làm sao tìm được cây kim trong cả biển dữ liệu."

Đây cũng là vấn đề mà Greene từng gặp khi còn làm với VMware, là nơi bà giúp phát triển vầ bán phần mềm ảo hóa này, cho phép một máy tính làm được công việc của nhiều máy tính. Những cựu quản lý tại VMWare nói rằng bà Greene rất nhạy bén về mặt kỹ thuật, và bà thường phản hồi trực tiếp, lập tức về những vấn đề kỹ thuật về sản phẩm của họ. Bà đã quản lý doanh nghiệp này mua lại EMC và đưa công ty lên sàn chứng khoán hồi năm 2007. Nhưng chỉ một năm sau đó, bà bị CEO EMC, Joe Tucci, sa thải.

Ngay ngày hôm sau, cổ phiếu của VMware sụt giảm khoảng gần 1/4. Gần đây hơn, Greene thành lạp công ty khởi nghiệp phần mềm Bebop, sau đó Google mua lại với giá 380 triệu USD hồi năm ngoái.

Google sẽ cần nỗ lực chứng minh rằng các sản phẩm điện toán đám mây của họ cũng không thua kém gì như của Amazon và Microsoft. Theo các chuyên gia tài chính, Google vẫn chưa tập trung nhiều vào mảng bán hàng. Nhưng có thể sắp đến sẽ khác.

IPv6: 20 năm & tương lai của địa chỉ mạng


Hồng Đăng

(PCWorldVN) Giao thức liên mạng thế hệ 6 kỉ niệm 20 năm ra đời vào đầu năm 2016 nhưng số lượng sử dụng vẫn chỉ chiếm khoảng 10% tổng lưu lượng Internet toàn cầu.

Một thị trường thứ cấp mạnh mẽ cho IPv4 đã tồn tại nhiều năm, cho phép người sử dụng mua địa chỉ mạng để sử dụng từ các bên thứ ba thay vì địa chỉ mới của các tổ chức đăng ký internet khu vực (Regional Internet Registry- RIR). Tuy nhiên năm 2015 đã chứng chiến một cột mốc quan trọng khi tổ chức đăng ký Internet của Mỹ Arin hay các RIR khu vực Bắc Mỹ cấp phát những địa chỉ IPv4 miễn phí cuối cùng. Hiện trên thế giới chỉ còn khu vực châu Phi mới còn có khả năng cung cấp IPv4 miễn phí. Điều này dẫn đến việc giá thành IPv4 đang tăng lên và các doanh nghiệp hiện nay phải cân nhắc xem liệu chi phí cho địa chỉ mạng phiên bản 4 có đủ giá trị để tiếp tục sử dụng hay thay đổi lên phiên bản IPv6.

IPv6- 20 năm phát triển

Năm 1996, một tài liệu mang số hiệu 1883 đưa ra ứng dụng cho công nghệ Internet, đó là giao thức liên mạng phiên bản 6- Internet Protocol version 6 (IPv6) nhằm nâng cấp cho các thế hệ trước đó. Vậy giao thức Internet là gì, và phiên bản thứ 6 này có gì khác biệt so với 5 người anh em trước đó. Và nếu phiên bản 6 này thực sự tuyệt vời thì tại sao sau 2 thập kỉ tồn tại vẫn chưa đạt tới 10% lượng sử dụng so với lượng địa chỉ mạng hoạt động trên toàn thế giới.

Nhắc lại phiên bản trước đó là IPv4 thì đây là giao thức được triển khai rộng rãi nhất trong bộ giao thức của lớp Internet. IPv4 sử dụng 32-bit để đánh địa chỉ nên thế giới chỉ có khoảng 4,3 tỷ (232) địa chỉ như thế này và chúng ta đã sử dụng hết sau hơn 30 năm phát triển (IPv4 ra đời năm 1981). Và thế hệ tiếp theo được kì vọng là phiên bản mới sẽ mang đến không gian mạng rộng lớn hơn khi mà IPv6 có chiều dài 128-bit, gồm 8 nhóm, mỗi nhóm 16-bit được biểu diễn dưới dạng số thập lục phân (Hexa-Decimal) và tạo ra không gian 2128 địa chỉ IP.

Tại sao có sự trì hoãn nâng cấp?

Để trình duyệt web có thể hiển thị một đoạn video trên mạng thì một loạt dữ liệu hình ảnh cần được chuyển giao. Phần dễ dàng ở đây là chúng ta có đủ những sợi cáp và điểm truyền phát tín hiệu nhưng khó khăn ở đây là những gì tác động ảnh hưởng đến người nhận như xung ánh sáng, điện áp trong các loại cáp, sóng radio đi trong không khí. Từ đó mới hình thành các giao thức và tiêu chuẩn.

Khi tiêu chuẩn được thay thế hoặc nâng cấp thì điều gì cần phải quan tâm. Ví dụ khi bùng nổ video trên mạng thì có thể Youtube cần nâng cấp kết nối hạ tầng với việc thay thế Ethernet 10 Gigabit bằng Ethernet 100 Gigabit. Việc nâng cấp này chỉ ảnh hưởng tới máy chủ và bộ định tuyến nhưng phần còn lại của Internet thì không cần quan tâm. Chúng ta đã thêm 4 số 0 vào tốc độ Ethernet và Wi-Fi trong những thập kỷ qua. Nhưng Ethernet, FDDI, Wi-Fi, PPP... và các tiêu chuẩn khác chỉ cần thêm dữ liệu điều khiển của mình khi một gói tin được truyền đi và sau đó loại bỏ nó sau khi đầu bên kia nhận được.

Các tiêu chuẩn khác chi phối việc thông dịch dữ liệu của người nhận cuối cùng. Khi Youtube nâng cấp trình chiếu video từ Adobe Flash sang HTML5 thì ứng dụng đầu cuối của trang web này cũng thay đổi. Nhưng bộ định tuyến thì không quan tâm tới điều này, thiết bị này chỉ nhìn vào các gói dữ liệu được truyền đến và đi. Vì vậy đối với các doanh nghiệp thì nâng cấp các ứng dụng chạy trên Internet là khó khăn hơn so với tăng tốc độ băng thông. Và xa hơn đó là việc triển khai các tiêu chuẩn mới luôn phải cân nhắc những cái cũ khi mà chúng vẫn đang rất hữu ích.

Lý thuyết có thể khá đơn giản, tuy nhiên các giao thức Internet có sự khác biệt bởi các hệ thống gửi dữ liệu cần tạo ra gói IP, để sau đó bộ định tuyến hay bất kì tường lửa, cân bằng tải nào cũng nhìn vào các gói IP đó để gửi đi. Cuối cùng hệ thống nhận đầu cuối cần phải hiểu được các gói IP đó để xử lý. Phức tạp hơn đó là các ứng dụng gửi và nhận còn phải phân biệt rõ ràng sự khác biệt giữa một địa chỉ IPv4 và địa chỉ IPv6.

Vì vậy sự chuyển đổi từ IPv4 sang IPv6 không chỉ nâng cấp máy chủ và ứng dụng, hoặc hai hệ thống trên hai đầu cáp, mà cần phải nâng cấp tất cả các máy chủ, thiết bị đầu cuối, bộ định tuyến, tường lửa, bộ cân bằng tải, và hệ thống quản lý. Đó là lý do tại sao tất cả các hệ điều hành và gần như tất cả các thiết bị mạng đều hỗ trợ IPv6 nhưng chúng ta vẫn phải sử dụng IPv4.


Sự tương thích

Các hệ thống IPv4 đều tương thích với IPv6 nhưng lại không có điều ngược lại. Điểm yếu của IPv6 đó chính là không tương thích ngược với các hệ thống cũ vì vậy cần phải có những công nghệ phục vụ cho việc chuyển đổi từ địa chỉ IPv4 sang địa chỉ IPv6 và đảm bảo không phá vỡ cấu trúc cũng như làm gián đoạn hoạt động của mạng Internet. Ví dụ, công nghệ chuyển đổi Dual-stack cho phép hai thế hệ địa chỉ mạng cùng tồn tại trong cùng một thiết bị hay chuyển đổi địa chỉ mạng (NAT-Network Address Translation) cho phép thiết bị chỉ hỗ trợ IPv6 có thể giao tiếp với thiết bị chỉ hỗ trợ IPv4 và cuối cùng là công nghệ đường hầm (Tunnel) sử dụng hạ tầng IPv4 để truyền gói tin IPv6.

Việc tương thích của 2 phiên bản hiện đang tạo ra các cuộc tranh luận bởi xét cho cùng thì vào thời điểm những năm đầu thập niên 1980, 32-bit cho phép trong khoảng bốn tỷ địa chỉ, vẫn không đủ cho hiện tại thì 128-bit với 340 tỷ tỷ tỷ tỷ địa chỉ cũng tồn tại trong một thời gian nhất định. Vì thế mở rộng hay nối dài địa chỉ vẫn chưa được xem là giải pháp tối ưu.

Yếu tố thúc đẩy việc triển khai IPv6

Triển khai IPv6 trên diện rộng đang được thúc đẩy bởi nhiều yếu tố mà trong đó sự phát triển và ứng dụng Internet of Things (IoT) là một tron những chất xúc tác hàng đầu. Gartner đã dự đoán sẽ có hơn 20,8 tỷ thiết bị IoT năm 2020 và tất cả chúng đều kết nối Internet thường xuyên. IPv4 đã vốn thiếu nguồn cung nên có thể dự đoán một số lượng lớn các thiết bị IoT sẽ sử dụng IPv6.

Không ai có thể chắc chắn chính xác sự phát triển của IoT như thế nào, tuy nhiên với phương án giả định là tất cả mọi thiết bị kết nối cần giao tiếp với nhau thì IPv6 cũng làm cho quá trình này dễ dàng hơn. Sự chuyển dịch đồng nghĩa với việc sử dụng IPv4 sẽ giảm, tuy nhiên giống như một số thứ đã cũ như COBOL (ngôn ngữ lập trình) thì thế hệ địa chỉ mạng này sẽ tồn tại cùng chúng ta trong một thời gian dài.

Triển khai IPv6

Trong dịp kỷ niệm sinh nhật lần thứ 20 của giao thức IPv6, các số liệu của Google công chỉ ra rằng Bỉ đứng đầu bảng xếp hạng với gần 43 % đang sử dụng IPv6. Mỹ đang chứng kiến một sự tăng trưởng nhanh chóng với việc triển khai gần 25 % và một số nước châu Âu khác cũng đang dịch chuyển.

Tại Việt Nam thì mạng IPv6 quốc gia chính thức khai trương từ ngày 6/5/2013 và sử dụng hạ tầng cơ sở kết nối song song với hệ thống mạng DNS quốc gia IPv4/IPv6, trạm trung chuyển Internet VNIX, ISP.

Trong đó mạng VNIX IPv4/IPv6 đặt tại các điểm Hà Nội, Đà Nẵng và TP.HCM và trung chuyển Internet trong nước kết nối mạng của các ISP. Ngoài ra VNNIC cung cấp mạng Promote IPv6 mang đến cộng đồng các dịch vụ cơ bản trên nền IPv6 nhằm khuyến khích, thúc đẩy việc ứng dụng địa chỉ mới này. Theo đánh giá từ các hệ thống phân tích thống kê IPv6 quốc tế, tỷ lệ sử dụng và lưu lượng địa chỉ mạng mới này tại Việt Nam còn thấp. Một trong những lý do chính là các ISP Việt Nam mới chỉ sẵn sàng IPv6 ở phần mạng lõi và chưa thực sự mang IPv6 đến khách hàng.

Các phiên bản địa chỉ mạng IPv1,v2,v3 và v5 ở đâu?

Các giao thức Internet (IP) ban đầu không được thiết kế với giải pháp quản lý địa chỉ trên mạng và được sử dụng như một công nghệ để phân chia các ngăn xếp với bộ giao thức liên mạng Transmission Control Protocol (TCP). Vào thời điểm đó, việc thiết kế TCP nhằm giải quyết 2 vấn đề cùng một lúc là làm thế nào đóng gói dữ liệu và làm thế nào có thể gửi nó đi khắp nơi? Đây cũng chính là cách mà chúng ta tạo ra IPv4.

Trong lịch sử TCP thì phiên bản đầu tiên được thiết kế vào năm 1973 sau khi mạng ARPANET đi vào hoạt động. TCP phiên bản 2 ra đời vào năm 1977 với cuộc thử nghiệm kết nối ba mạng lưới TCP/IP, giữa Mỹ, Anh và Na Uy. Cũng từ đó các nhà nghiên cứu nhận ra họ đang đi sai hướng với các giao thức khi các nguyên tắc lớp liên tục bị vi phạm.

Tại thời điểm này, TCP/ IP được phân chia và đồng thời được gắn mác phiên bản số 3, sau đó ổn định hóa với phiên bản TCP/IP v4 - giao thức tiêu chuẩn hiện dùng của Internet ngày nay.

Và ngày này người ta đang cố gắng chuyển đổi lên thế hệ thứ 6, còn thế hệ thứ 5 đóng vai trò gì? IPv5 là phiên bản lỗi, một nỗ lực không thành công để mở rộng và giải quyết một số vấn đề của IPv4.

IPv4 đã được xây dựng để hỗ trợ phân phối hiệu quả của một số gói dữ liệu truyền đi và đảm bảo tốc độ cũng như kiểm soát độ trễ. Nói cách khác là đây là giao thức giải quyết chất lượng dịch vụ mà các thế hệ trước đó không làm được.

Với IPv5, các nhà khoa học máy tính đang cố gắng tìm cách để cung cấp QoS (quality of service) tốt hơn, hỗ trợ vận chuyển dữ liệu media (voice, video...) xuất phát từ những đòi hỏi về streaming video. Vì thế IPv5 còn gọi là Internet Stream Protocol và Apple, Sun, IBM cũng đã nỗ lực để triển khai IPv5. Tuy nhiên cuối cùng thì công nghệ này chỉ được dùng để cải tiến băng thông, ứng dụng và chất lượng nén dữ liệu cho IPv4.

Truyền dữ liệu không cần Internet


Apple iBeacon: trợ giúp cá nhân. Bộ phát iBeacon biết được người dùng đang ở xa hay đến gần với ba mức độ: xa, gần và trực tiếp. Sau đó, nó sẽ đưa ra những thông tin cần thiết cho người dùng như thông tin khuyến mãi, thanh toán giao dịch…
Bùi Lê Duy

(PCWorldVN) Kết nối trực tiếp giữa điện thoại thông minh thường cho tốc độ truyền nhanh hơn hoặc chơi game mượt hơn. Nhưng tính bảo mật của các phương thức kết nối này như thế nào?

Các nhà phát triển ứng dụng di động luôn mơ đến một thế giới mà các thiết bị đều có thể nhận diện được nhau và hơn nữa là kết nối trực tiếp với nhau trong một không gian nào đó. Vào thời điểm này, chúng ta phải cần đến một router WLAN làm trung gian để kết nối các thiết bị di động với nhau. Mặc dù Bluetooth cũng là cách dễ dàng để kết nối trực tiếp hai thiết bị nhưng phương cách này chậm và đòi hỏi người dùng phải xác thực thiết bị lẫn nhau. Điều đó quá rối rắm đối với những ứng dụng cung cấp thông tin như hướng dẫn mua sắm khi bạn bước vào trung tâm thương mại, hay viện bảo tàng. Vài công ty, nhất là Apple với giải pháp iBeacon, muốn thay đổi cách mà các thiết bị di động tương tác với môi trường bên ngoài. Những công nghệ mới trong tương lai, như Nearby của Google hay Wi-Fi Aware hứa hẹn sẽ có được giải pháp kết nối trực tiếp, tạm thời giữa hai thiết bị với nhau. Lợi ích dễ thấy nhất của một hệ thống như vậy là không cần tìm điểm kết nối (hot spot) trung gian nào và cũng không cần đăng nhập, xác thực dài dòng.

Google Nearby: hệ thống định vị phức tạp. Nearby sử dụng WLAN lẫn Bluetooth, tuỳ vào khoảng cách và tốc độ cần truyền. Bằng cách trao đổi tín hiệu âm thanh mà tai người không nghe được, các thiết bị định vị và nhận diện lẫn nhau cho dù người dùng đến gần hay đi ra xa.
Không phải đăng nhập, không thêm chi phí

Với những mạng kết nối gần như vậy, bạn rất dễ rủ bạn bè cùng chơi game chung trên chuyến xe lửa hay trên máy bay, trong công viên… Những cửa hàng bán lẻ cũng có thể gửi báo giá khuyến mãi vào thẳng điện thoại của khách nào đi ngang qua mà không cần đến mấy tờ rơi quảng cáo. Tuy vậy, những kết nối “always-on” (luôn luôn mở) như vậy cũng đòi hỏi mức bảo mật và an toàn dữ liệu tương xứng. Trong tương lai gần, ứng dụng chặn quảng cáo chắc chắn sẽ là thị trường đầy tiềm năng.

Apple đang đi đầu trong lĩnh vực này với giải pháp iBeacon. Vì công nghệ này chỉ cho phép kết nối một chiều, từ bộ phát iBeacon đến thiết bị cuối, nên nó rất phù hợp cho thanh toán di động, vé điện tử (e-ticket) hoặc thông tin tiếp thị. Nhưng iBeacon không phù hợp để truyền dữ liệu giữa các thiết bị với nhau. iBeacon đơn giản là một bộ phát Bluetooth - LE và nó được thiết kế để hoạt động ở mức tối giản nhất có thể, sử dụng chuẩn mã hoá AES 128-bit.

iBeacon cũng có thể xác định được khoảng cách từ nó đến thiết bị của người dùng, nhưng chỉ theo ba cấp độ: “Immediate” (vài cm), “Near” (dưới 10m) và “Far” (trên 10m). Kèm theo đó là khả năng nhận biết được một người dùng đang đến gần, dừng lại hoặc rời xa. Tại Mỹ, Apple sử dụng iBeacon để thử nghiệm nhiều trường hợp, nhưng chưa áp dụng thực tế. iBeacon có thể hỗ trợ các thiết bị chạy iOS 7 và Android 4.3 trở lên.

Từ Windows Phone 8.1 trở lên, bạn có thể kích hoạt Wi-Fi Sense trong “WLAN optimisation”. Nó có cả tuỳ chọn cho địa chỉ Facebook và Skype.
Google Nearby sử dụng Bluetooth và Wi-Fi

Với Nearby, Google có kế hoạch thiết lập kết nối trực tiếp giữa các thiết bị di động với nhau. Nhưng hệ thống này xem ra phức tạp hơn nhiều so với iBeacon của Apple, mỗi thiết bị có thể thiết lập một kết nối với mọi thiết bị khác theo mô hình kết nối mạng mesh (mạng tổ ong, mỗi node đều có khả năng nhận và chuyển tiếp dữ liệu). Tuỳ vào yêu cầu tốc độ truyền và khoảng cách mà Nearby sử dụng Wi-Fi hoặc Bluetooth LE để kết nối.

Các thiết bị kết nối đồng thời với nhau thông qua tín hiệu âm thanh, ở tần số mà tai người không nghe được. Tính năng lạ thường này xem ra là một loại hệ thống siêu âm, có thể cho biết chính xác vị trí và khoảng cách giữa các thiết bị với nhau. Bởi Nearby cũng hỗ trợ beacon nên bộ truyền beacon được Apple hỗ trợ có thể dùng kèm, bổ sung cho giải pháp này.

Google cũng đang cung cấp cho các nhà phát triển những giao diện lập trình cho hai chế độ khác nhau: Nearby Messages để chat theo nhóm hoặc cùng làm việc cộng tác trên tài liệu Office; và chế độ Nearby Connections thiết lập kết nối dữ liệu thời gian thực. Có vài ứng dụng thực tế, trong đó chơi game nhiều người, truyền video và bảng tương tác ảo (whiteboard). Nearby hỗ trợ hệ điều hành Android 4.3 trở lên và có thể dùng trên iOS qua Google Play Services (từ phiên bản 7.8 trở lên). Thậm chí, bạn không cần đến tài khoản Google mới dùng được. Nearby cũng hỗ trợ chế độ guest trên Chromecast và nó sử dụng được với Google Play Games và add-on Google Tone của Chromecast.

Về nguyên tắc, hai quan điểm kết nối của Wi-Fi ALliance là Aware (nhận ra nhau) và Direct (kết nối trực tiếp với nhau) đều hợp với Google Nearby, nhưng chỉ khi nó dùng kết nối của Wi-Fi. Aware là công nghệ tự động nhận diện và định vị lẫn nhau. Không như các mạng WLAN thông thường, Aware nhanh hơn, tốt hơn khi có nhiều người kết nối. Ngoài ra, mạng WLAN ngốn nhiều pin của điện thoại nhưng Aware sử dụng tín hiệu rất ngắn, như nhịp tim, nên giới công nghệ gọi là tín hiệu “heartbeat”, để duy trì kết nối. Theo Wi-Fi Alliance, đặc tính này giúp tiết kiệm pin rất nhiều cho thiết bị (so sánh như bóng đèn dây tóc và bóng đèn huỳnh quang). Từ góc độ kỹ thuật này, Wi-Fi Direct có nhiều đặc tính tương tự như Aware. Tuy nhiên, Direct chỉ để truyền dữ liệu giữa hai thiết bị mà thôi, gần giống với AirDrop của Apple.

Bản thân Wi-Fi Alliance không đưa ra bất kỳ ứng dụng nào cho Aware và Direct. Thay vào đó, họ dựa vào các nhà phát triển ứng dụng, là nhóm từng đưa ra ý tưởng sử dụng mạng mesh. Một ứng dụng liên quan đến định vị thiết bị rất hữu dụng là nếu bạn đang trong khán phòng, ứng dụng có thể chỉ cho bạn biết có bạn bè của mình trong khán phòng hay không và họ đang ở đâu. Nhờ vào tính năng định vị này mà ứng dụng có thể hướng dẫn bạn đến gặp bạn của mình. Tính năng này cũng hữu ích cho rạp chiếu phim, xí nghiệp hay những khu chợ đêm sầm uất dễ lạc. Wi-Fi Aware, theo một phương diện nào đó lại giống với thiết bị Internet of Things, nhất là nếu bạn sử dụng trong nhà thông minh, luôn cần đến chuẩn kết nối trực tiếp.

Wi-Fi Aware và Direct hiện thời được các nhà sản xuất chip WLAN lớn hỗ trợ gồm: Intel, Broadcom, Marvell và Realtek. Thậm chí, những chip cũ cũng có thể được nâng cấp firmware để hỗ trợ. Những cập nhật này phải do nhà sản xuất điện thoại và máy tính bảng đưa ra.

TransferJet cho Android, iOS và win PC của Toshiba giống như công nghệ NFC, chỉ hoạt động trong tầm 5cm nhưng công nghệ này có tốc độ truyền dữ liệu rất cao, đến 375Mb/giây.
Quick Data Transfer với TransferJet

Trong triển lãm IFA gần đây, Toshiba công bố adapter TransferJet giúp truyền dữ liệu giữa PC Windows và các thiết bị Android và iOS. Giống như công nghệ NFC, TransferJet là công nghệ truyền dữ liệu cự ly ngắn, chỉ trong khoảng 5cm. Nhưng khác với NFC, nó có thể đạt tốc độ tối đa đến 375Mbit/s, nghĩa là bạn có thể truyền dữ liệu lớn như phim HD, thư viện hình ảnh, PDF… một cách dễ dàng. Vào thời điểm này, adapter kết nối với thiết bị thông qua ngõ USB hoặc ngõ Lightning. Tuy vậy, nếu hiệp hội TransferJet Alliance (có Sony làm thành viên) có chiến lược rõ ràng, chuẩn này rất có thể sẽ tích hợp thẳng vào trong điện thoại thông minh.

Trong khi đó, Wi-Fi Sense của Microsoft không giúp gì được cho kết nối trực tiếp giữa hai thiết bị nhưng lại cho bạn tự động đăng nhập vào điểm truy cập (hot spot) và mạng WLAN mà không cần thông qua các thủ tục rườm rà. Tính năng này có thể dùng trong mọi thiết bị chạy Windows Phone 8.1 và Windows 10.

Wi-Fi Sense hoạt động dựa trên dữ liệu truy cập WLAN trước đó và nó tự động kết nối Wi-Fi cho mọi địa chỉ liên lạc có trong sổ địa chỉ trên máy. Nguyên tắc của tính năng này là phạm vi Wi-Fi càng rộng nếu có càng nhiều người nhập mạng, nên đó là lý do tại sao Wi-Fi Sense có thể mở rộng tầm phủ địa chỉ liên lạc trên Skype và Facebook. Mục tiêu xa hơn là một cơ sở dữ liệu trung tâm, gồm càng nhiều điểm WLAN càng tốt. Mặc dù Microsoft lưu dữ liệu đăng nhập theo định dạng được mã hoá và không cho người dùng thấy bất kỳ mật khẩu nào nhưng giới công nghệ luôn quan ngại đến khả năng bảo mật của tính năng này.